%     AERO LOAD - программа для нагружения агрегатов самолета распределенной нагрузкой
%     Copyright (C) 2018-2024  Михаил Козлов
%     Сайт проекта: <http://www.fastenerdoctor.ru/>
%     Адрес электронной почты для связи с разработчиком:
%     <doctor.fastener@gmail.com>
% 
%     Эта программа является свободным программным обеспечением: Вы можете
%     распространять ее и/или изменять, соблюдая условия Универсальной общественной
%     лицензии GNU, опубликованной Фондом свободного программного обеспечения,
%     либо редакции 3, либо (на Ваше усмотрение) любой редакции, выпущенной позже.
% 
%     Эта программа распространяется в надежде на то, что она окажется полезной,
%     но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, включая даже подразумеваемую гарантию ТОВАРНОЙ ПРИГОДНОСТИ,
%     либо ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. Ознакомьтесь с Универсальной общественной
%     лицензией GNU для получения более подробной информации.
% 
%     Вы должны были получить копию Универсальной общественной лицензии GNU
%     вместе с этой программой. Если Вы ее не получили, то перейдите по адресу:
%     <http://www.gnu.org/licenses/>.
% 
%     This program is free software: you can redistribute it and/or modify
%     it under the terms of the GNU General Public License as published by
%     the Free Software Foundation, either version 3 of the License, or
%     (at your option) any later version.
% 
%     This program is distributed in the hope that it will be useful,
%     but WITHOUT ANY WARRANTY; without even the implied warranty of
%     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
%     GNU General Public License for more details.
% 
%     You should have received a copy of the GNU General Public License
%     along with this program.  If not, see <https://www.gnu.org/licenses/>.

function Check_Distr_Parameters(Load, Settings_Source)

global ErrCode;

Total_Check = 'TRUE'; % TRUE | FALSE    % Проверка значений даже тех параметров, которые не используются в текущем нагружении

% Изолированные проверки параметров

% if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Span_Load.Law, 'TRAPEZOID') && strcmp(Load.Span_Load.Trapezoid_Zd_Type, 'PARAMETER')))
%     
%     if ((Load.Span_Load.Trapezoid_Zd_Value < 0) || (Load.Span_Load.Trapezoid_Zd_Value > 1))
%         if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
%             fprintf (1, '\nОшибка: недопустимое значение параметра Span_Trapezoid_Zd_Value !\n');
%         else
%             fprintf (1, '\nОшибка: недопустимое значение параметра SPAN_TRAPEZOID_ZD_VALUE в конфигурационном файле!\n');
%         end
%         fprintf (1, 'Допустимый диапазон значений параметра составляет [0.0, 1.0]\n');
%         ErrCode = -1;
%         return;
%     end
%     
% end

% if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Law, 'TRAPEZOID') && strcmp(Load.Chord_Pressure.Trapezoid_Xd_Type, 'PARAMETER')))
%     
%     if ((Load.Chord_Pressure.Trapezoid_Xd_Value < 0) || (Load.Chord_Pressure.Trapezoid_Xd_Value > 1))
%         if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
%             fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Trapezoid_Xd_Value !\n');
%         else
%             fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_TRAPEZOID_XD_VALUE в конфигурационном файле!\n');
%         end
%         fprintf (1, 'Допустимый диапазон значений параметра составляет [0.0, 1.0]\n');
%         ErrCode = -1;
%         return;
%     end
%     
% end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_p2_p1_Type, 'CONSTANT') && (strcmp(Load.Chord_Pressure.Law, 'MODEL_1') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_2') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_3') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_6') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_7') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_8') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_11') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_12') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_13') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_14') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_15'))))
    
    if ((Load.Chord_Pressure.Model_X_p2_p1_Value <= 0) || (Load.Chord_Pressure.Model_X_p2_p1_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_p2_p1_Value !\n');
        else
            fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_P2_P1_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_p3_p1_Type, 'CONSTANT') && (strcmp(Load.Chord_Pressure.Law, 'MODEL_2') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_7') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_11') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_12') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_13'))))
    
    if ((Load.Chord_Pressure.Model_X_p3_p1_Value <= 0) || (Load.Chord_Pressure.Model_X_p3_p1_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
            fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_p3_p1_Value !\n');
        else
            fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_P3_P1_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_p4_p1_Type, 'CONSTANT') && strcmp(Load.Chord_Pressure.Law, 'MODEL_12')))
    
    if ((Load.Chord_Pressure.Model_X_p4_p1_Value <= 0) || (Load.Chord_Pressure.Model_X_p4_p1_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_p4_p1_Value !\n');
        else
             fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_P4_P1_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_f_Type, 'CONSTANT') && (strcmp(Load.Chord_Pressure.Law, 'MODEL_1') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_2') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_3') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_4') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_10') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_15'))))
    
    if ((Load.Chord_Pressure.Model_X_f_Value <= 0) || (Load.Chord_Pressure.Model_X_f_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_f_Value !\n');
        else
             fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_F_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_f1_Type, 'CONSTANT') && (strcmp(Load.Chord_Pressure.Law, 'MODEL_6') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_7') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_8') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_9') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_11') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_12') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_13') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_14'))))
    
    if ((Load.Chord_Pressure.Model_X_f1_Value <= 0) || (Load.Chord_Pressure.Model_X_f1_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_f1_Value !\n');
        else
             fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_F1_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

if (strcmp(Total_Check, 'TRUE') || (strcmp(Load.Chord_Pressure.Model_X_f2_Type, 'CONSTANT') && (strcmp(Load.Chord_Pressure.Law, 'MODEL_6') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_7') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_8') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_9') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_11') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_12') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_13') || ...
                                                                                                   strcmp(Load.Chord_Pressure.Law, 'MODEL_14'))))
    
    if ((Load.Chord_Pressure.Model_X_f2_Value <= 0) || (Load.Chord_Pressure.Model_X_f2_Value >= 1))
        if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
             fprintf (1, '\nОшибка: недопустимое значение параметра Chord_Model_X_f2_Value !\n');
        else
             fprintf (1, '\nОшибка: недопустимое значение параметра CHORD_MODEL_X_F2_VALUE в конфигурационном файле!\n');
        end
        fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
        ErrCode = -1;
        return;
    end
    
end

% Изолированные проверки распределений параметров

% if (~isempty(Load.Chord_Pressure.Trapezoid_Xd_Distr_Data))
%     
%     Distribution_Data = Load.Chord_Pressure.Trapezoid_Xd_Distr_Data;
%     
%     for i=1:size(Distribution_Data,1)
% 
%         if ((Distribution_Data(i,2) < 0) || (Distribution_Data(i,2) > 1))
%             if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
%                 fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра Xd в распределении по размаху!\n');
%             else
%                 fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра Xd в распределении по размаху в конфигурационном файле!\n');
%             end
%             fprintf (1, 'Допустимый диапазон значений параметра составляет [0.0, 1.0]\n');
%             ErrCode = -1;
%             return;
%         end
% 
%     end
%     
% end

if (~isempty(Load.Chord_Pressure.Model_X_p2_p1_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_p2_p1_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p2/p1 в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p2/p1 в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

if (~isempty(Load.Chord_Pressure.Model_X_p3_p1_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_p3_p1_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p3/p1 в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p3/p1 в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

if (~isempty(Load.Chord_Pressure.Model_X_p4_p1_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_p4_p1_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p4/p1 в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра p4/p1 в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

if (~isempty(Load.Chord_Pressure.Model_X_f_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_f_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

if (~isempty(Load.Chord_Pressure.Model_X_f1_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_f1_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f1 в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f1 в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

if (~isempty(Load.Chord_Pressure.Model_X_f2_Distr_Data))
    
    Distribution_Data = Load.Chord_Pressure.Model_X_f2_Distr_Data;
    
    for i=1:size(Distribution_Data,1)

        if ((Distribution_Data(i,2) <= 0) || (Distribution_Data(i,2) >= 1))
            if (strcmp(Settings_Source, 'PROGRAM_TEXT'))
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f2 в распределении по размаху!\n');
            else
                fprintf (1, '\nОшибка: обнаружено недопустимое значение параметра f2 в распределении по размаху в конфигурационном файле!\n');
            end
            fprintf (1, 'Координата по размаху: %f, значение параметра: %f\n', Distribution_Data(i,1), Distribution_Data(i,2));
            fprintf (1, 'Допустимый диапазон значений параметра составляет (0.0, 1.0)\n');
            ErrCode = -1;
            return;
        end

    end
    
end

% Взаимные проверки параметров и их распределений

if (strcmp(Load.Chord_Pressure.Law, 'MODEL_2'))
    
    if (isempty(Load.Chord_Pressure.Model_X_p3_p1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_p3_p1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_p2_p1_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_p2_p1_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_p3_p1_0, Load.Extrapolation.Model_X_p3_p1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_p2_p1_0, Load.Extrapolation.Model_X_p2_p1_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < p3/p1 < p2/p1 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
end

if (strcmp(Load.Chord_Pressure.Law, 'MODEL_6') || ...
    strcmp(Load.Chord_Pressure.Law, 'MODEL_8') || ...
    strcmp(Load.Chord_Pressure.Law, 'MODEL_14'))
    
    if (isempty(Load.Chord_Pressure.Model_X_f1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_f1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_f1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_f1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f2_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_f2_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_f2_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_f2_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_f1_0, Load.Extrapolation.Model_X_f1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_f2_0, Load.Extrapolation.Model_X_f2_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < f1 < f2 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
end

if (strcmp(Load.Chord_Pressure.Law, 'MODEL_7') || ...
    strcmp(Load.Chord_Pressure.Law, 'MODEL_11') || ...
    strcmp(Load.Chord_Pressure.Law, 'MODEL_13'))
    
    if (isempty(Load.Chord_Pressure.Model_X_p3_p1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_p3_p1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_p2_p1_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_p2_p1_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_p3_p1_0, Load.Extrapolation.Model_X_p3_p1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_p2_p1_0, Load.Extrapolation.Model_X_p2_p1_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < p3/p1 < p2/p1 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_f1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_f1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_f1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f2_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_f2_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_f2_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_f2_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_f1_0, Load.Extrapolation.Model_X_f1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_f2_0, Load.Extrapolation.Model_X_f2_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < f1 < f2 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
end

if (strcmp(Load.Chord_Pressure.Law, 'MODEL_9'))
    
    if (isempty(Load.Chord_Pressure.Model_X_f1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_f1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_f1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_f1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f2_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_f2_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_f2_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_f2_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_f1_0, Load.Extrapolation.Model_X_f1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_f2_0, Load.Extrapolation.Model_X_f2_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < f1 < f2 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
end

if (strcmp(Load.Chord_Pressure.Law, 'MODEL_12'))
    
    if (isempty(Load.Chord_Pressure.Model_X_p4_p1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_p4_p1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_p4_p1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_p4_p1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_p3_p1_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_p3_p1_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_p3_p1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_p2_p1_Distr_Data))
        
        Array_3 = zeros(2,2);
        
        Array_3(1,1) = 0;
        Array_3(2,1) = 1;
        Array_3(1,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        Array_3(2,2) = Load.Chord_Pressure.Model_X_p2_p1_Value;
        
    else
        
        Array_3 = Load.Chord_Pressure.Model_X_p2_p1_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Union_Column(Array_1(:,1), Array_2(:,1)), Array_3(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (~((Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_p4_p1_0, Load.Extrapolation.Model_X_p4_p1_1) < Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_p3_p1_0, Load.Extrapolation.Model_X_p3_p1_1)) && ...
              (Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_p3_p1_0, Load.Extrapolation.Model_X_p3_p1_1) < Access_Array(Array_3, Common_Domain(i), Load.Extrapolation.Model_X_p2_p1_0, Load.Extrapolation.Model_X_p2_p1_1))))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < p4/p1 < p3/p1 < p2/p1 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f1_Distr_Data))
        
        Array_1 = zeros(2,2);
        
        Array_1(1,1) = 0;
        Array_1(2,1) = 1;
        Array_1(1,2) = Load.Chord_Pressure.Model_X_f1_Value;
        Array_1(2,2) = Load.Chord_Pressure.Model_X_f1_Value;
        
    else
        
        Array_1 = Load.Chord_Pressure.Model_X_f1_Distr_Data;
        
    end
    
    if (isempty(Load.Chord_Pressure.Model_X_f2_Distr_Data))
        
        Array_2 = zeros(2,2);
        
        Array_2(1,1) = 0;
        Array_2(2,1) = 1;
        Array_2(1,2) = Load.Chord_Pressure.Model_X_f2_Value;
        Array_2(2,2) = Load.Chord_Pressure.Model_X_f2_Value;
        
    else
        
        Array_2 = Load.Chord_Pressure.Model_X_f2_Distr_Data;
        
    end
    
    Common_Domain = Union_Column(Array_1(:,1), Array_2(:,1));
    
    for i=1:size(Common_Domain,1)
        
        if (Access_Array(Array_1, Common_Domain(i), Load.Extrapolation.Model_X_f1_0, Load.Extrapolation.Model_X_f1_1) >= Access_Array(Array_2, Common_Domain(i), Load.Extrapolation.Model_X_f2_0, Load.Extrapolation.Model_X_f2_1))
            
            fprintf (1, '\nОшибка: недопустимое соотношение параметров распределения в модели %s !\n', Load.Chord_Pressure.Law);
            fprintf (1, 'В данной модели на всем протяжении размаха должно выполняться условие: 0 < f1 < f2 < 1\n');
            ErrCode = -1;
            return;
            
        end
        
    end
    
end
